package ocio.actions;  

import java.util.HashSet;
import java.util.Set;
import ocio.beans.Oferta;
import ocio.beans.Producto;
import ocio.services.ProductoService;
import ocio.services.ServiceLocator;

import com.opensymphony.xwork2.ActionSupport;

/**
 * Clase destinataria de la petición de modificación de los datos de un producto.
 * @author Esther García Galán
 * @author Rubén Gómez Vales
 * @version 1.0 13/05/2014
 * @see ocio.beans.Producto
 */
public class ModificarProductoAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	private int id;
	private String nombre;
	private String descripcion;
	private String direccion;
	private String telefono;
	private String municipio;
	private String mensaje;
	//No se pude modificar la provincia de un producto
	
	//private List<Producto> listaProductos = new ArrayList<Producto>();
	private Set<Oferta> listaOfertas = new HashSet<Oferta>();
	private Producto producto;
	
   /**
	 * Método execute() de la clase ActionSupport de Struts 2. 
	 * Solicita los servicios para modificar la información de un producto según 
	 * los datos introducidos por el proveedor o por el administrador en un formulario.
	 * @return un string que indica la respuesta de la acción ejecutada sobre la petición del usuario.
	 */
	public String execute(){	
		
		ServiceLocator serviceLocator = ServiceLocator.getServiceLocator();
		ProductoService productoService = (ProductoService)serviceLocator.getService("Producto");		

		productoService.update(this);	   
		
		this.setProducto((Producto)productoService.searchById(id));
		this.listaOfertas=this.producto.getOfertas();
		mensaje="Los datos del producto han sido modificados con éxito.";
		return "success";	
	}

	
   /**
	 * Método validate() de la clase ActionSupport de Struts 2. 
	 * Comprueba que la informacion introducida por el proveedor o administrador en el formulario
	 *  está en el formato adecuado y se han rellenado los campos obligatorios.
	 */
	public void validate(){
		
		if(nombre.length()==0){
			this.addFieldError("nombre","El nombre del producto es necesario.");
		}
		
		if(descripcion.length()==0){
			this.addFieldError("descripcion","Se requiere una descripción para el producto.");
		}
		if(direccion.length()==0){
			this.addFieldError("direccion","Es necesario introducir la dirección donde se ofrece el producto.");
		}
		if(municipio.length()==0){
			this.addFieldError("municipio","Es necesario introducir el municipio donde se ofrece el producto.");
		}
		if(telefono.length()==0){
			this.addFieldError("telefono","Se requiere un telefono de contacto.");
		}
	
		//Datos para la página a la que se devuelve el control
		ServiceLocator serviceLocator = ServiceLocator.getServiceLocator();
		ProductoService productoService = (ProductoService)serviceLocator.getService("Producto");		
		this.setProducto((Producto)productoService.searchById(id));
		this.listaOfertas=this.producto.getOfertas();
		
		mensaje="Error en la introducción de los datos";
		
	}
	
	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	public String getTelefono() {
		return telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public String getDireccion() {
		return direccion;
	}

	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}

	public String getMunicipio() {
		return municipio;
	}

	public void setMunicipio(String municipio) {
		this.municipio = municipio;
	}

	public Producto getProducto() {
		return producto;
	}

	public void setProducto(Producto producto) {
		this.producto = producto;
	}

	public Set<Oferta> getListaOfertas() {
		return listaOfertas;
	}

	public void setListaOfertas(Set<Oferta> listaOfertas) {
		this.listaOfertas = listaOfertas;
	}

	public String getMensaje() {
		return mensaje;
	}

	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}
	
}
